﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Face8280WebSocketServer.DB.Device
{
    public class FaceDeviceInfo
    {
        #region 系统基本参数
        [Key]
        public int Id { get; set; }
        /// <summary>
        /// 设备SN
        /// </summary>
        public string DeviceSn { get; set; }
        /// <summary>
        /// 设备名称
        /// </summary>
        public string DeviceName { get; set; }
        /// <summary>
        /// 设备IP
        /// </summary>
        public string DeviceIP { get; set; }
        /// <summary>
        /// 设备端口
        /// </summary>
        public int DevicePort { get; set; }
        /// <summary>
        /// 连接类型
        /// </summary>
        /// <value>0--服务端；1--客户端</value>
        public byte ConnectType { get; set; }
        /// <summary>
        /// 通讯令牌
        /// </summary>
        public string Token { get; set; }
        /// <summary>
        /// 进出类型
        /// </summary>
        /// <value>
        /// 0--进门；1--出门
        /// </value>
        public byte Door { get; set; }
        /// <summary>
        /// 公司名称
        /// </summary>
        public string CompanyName { get; set; } = "";
        /// <summary>
        /// 语言
        /// </summary>
        /// <value>
        /// 1  -中文、2  -英文、3  -繁体 、4  -法语、5  -俄语、6  -葡萄牙语、7  -西班牙语、8  -意大利语、9  -日语、10 -韩语、11 -泰语、12 -阿拉伯语
        /// </value>
        public byte Language { get; set; }
        /// <summary>
        /// 菜单密码
        /// </summary>
        public string MenuPassword { get; set; } = "";

        /// <summary>
        /// 保存现场图片
        /// </summary>
        /// <value>
        /// 0--不保存，1--保存
        /// </value>
        public byte SavePhoto { get; set; }
        /// <summary>
        /// 是否存储非雇员识别记录
        /// </summary>
        /// <value>
        /// 0--不存储，1--存储
        /// </value>
        public byte SaveExternalvisitors { get; set; }
        /// <summary>
        /// 日期时间同步
        /// </summary>
        /// <remarks>
        /// 示例 (yyyy-MM-dd HH:mm:ss ww)     ww 是星期 : 范围01-07；  星期一 -- 01;星期日 --07
        /// </remarks>
        /// <value>
        /// 2021-09-25 15:02:53 06 
        /// </value>
        public string Time { get; set; }
        /// <summary>
        /// 亮度设置
        /// </summary>
        /// <value> 1-10</value>
        public byte Brightness { get; set; }
        /// <summary>
        /// 曝光设置
        /// </summary>
        /// <value>
        /// -3--3
        /// </value>
        public int Exposure { get; set; }
        /// <summary>
        /// 红外图像开关
        /// </summary>
        /// <value>0--关闭；1--开启</value>
        public byte IR { get; set; }
        /// <summary>
        /// 设备二维码图片地址
        /// </summary>
        public string QRCodePath { get; set; }
        /// <summary>
        /// 设备时区设置
        /// </summary>
        public string TimeZone { get; set; }
        #endregion

        #region 人脸识别
        /// <summary>
        /// 人脸比对阈值
        /// </summary>
        /// <value>
        /// 1-99 人脸识别阈值 是越大精度越高
        /// </value>
        public byte FaceComparison { get; set; }

        /// <summary>
        /// 指纹比对阈值
        /// </summary>
        /// <value>
        /// 取值范围：50-100
        /// </value>
        public byte FPComparison { get; set; }
        /// <summary>
        /// 人脸机识别距离
        /// </summary>
        /// <value>
        /// 1--远（默认值）、2--中、3--近
        /// </value>
        public byte Distance { get; set; }
        /// <summary>
        /// 活体检测
        /// </summary>
        /// <value>
        /// 0--禁用；1--启用；
        /// </value>
        public byte Bioassay { get; set; }
        /// <summary>
        /// 活体检测阈值
        /// </summary>
        /// <value>
        /// 取值范围 1-10
        /// </value>
        public byte FaceIRThreshold { get; set; }
        /// <summary>
        /// 补光灯
        /// </summary>
        /// <value>
        /// 0：常闭；  1：常开； 2：自动；
        /// </value>
        public byte Light { get; set; }
        /// <summary>
        /// 人脸机口罩识别开关
        /// </summary>
        /// <value>
        /// 0--禁止；<br>1--启用
        /// </value>
        public byte FaceMask { get; set; }
        /// <summary>
        /// 口罩阈值
        /// </summary>
        /// <value>
        /// 取值范围 1-99 识别阈值 是越大精度越高
        /// </value>
        public byte MaskThreshold { get; set; }
        /// <summary>
        /// 调整摄像头捕捉到的画面亮度
        /// </summary>
        /// <value>
        /// 1--标准;2--增亮 ;3--减暗
        /// </value>
        public byte Luminance { get; set; }
        #endregion

        #region 人脸机体温检测参数
        /// <summary>
        /// 测温模式开关
        /// </summary>
        /// <value>
        /// 0：非测温模式 1：测温模式
        /// </value>
        public byte BodyTmpUse { get; set; }
        /// <summary>
        /// 体温显示格式
        /// </summary>
        /// <value>
        /// 1--摄氏度（默认值）;2--华氏度；
        /// </value>
        public byte BodyTmpFormat { get; set; }
        /// <summary>
        ///  体温报警阈值 取值范围：37-40
        /// </summary>
        public double BodyTmpAlarm { get; set; }
        /// <summary>
        /// 在UI上是否显示体温
        /// </summary>
        /// <value>
        /// <para>0--禁止显示体温</para>
        /// <para>1--显示体温信息 禁止显示体温时，合法验证后依然要记录体温记录</para>
        /// </value>
        public byte BodyTmpShow { get; set; }
        /// <summary>
        ///温度补偿值
        /// </summary>
        /// <value>-1~1</value>
        public int BodyTmpCompensate { get; set; }
        #endregion

        #region 门禁功能
        /// <summary>
        /// WG输出功能开关
        /// </summary>
        /// <value>
        /// 1--启用；2--禁用
        /// </value>
        public byte WGUse { get; set; }
        ///// <summary>
        ///// WG格式
        ///// </summary>
        ///// <value>
        ///// 26--WG26；34--WG34；66--WG66
        ///// </value>
        //public byte WGBits { get; set; }
        /// <summary>
        /// WG字节顺序
        /// </summary>
        /// <value>
        /// 1--高位在前低位在后；2--低位在前高位在后
        /// </value>
        public byte WGOrder { get; set; }
        /// <summary>
        /// 输出数据类型
        /// </summary>
        /// <value>
        /// 1--输出用户号；2--输出人员卡号
        /// </value>
        public byte WGType { get; set; }
        /// <summary>
        /// WG输出格式
        /// </summary>
        /// <value>
        /// （2）二字节 （3）三字节 （4）四字节  （8）八字节
        /// </value>
        public byte CardBytes { get; set; }
        /// <summary>
        /// 继电器否支持双稳态
        /// </summary>
        /// <value>
        /// 1为支持，0为不支持，默认为0
        /// </value>
        public byte Relay { get; set; }
        /// <summary>
        /// 开锁时输出时长
        /// </summary>
        /// <value>
        /// 最大65535秒。0表示0.5秒
        /// </value>
        public ushort ReleaseTime { get; set; }
        /// <summary>
        /// 自由通行（免验证）
        /// </summary>
        /// <value>
        /// 0--禁止；1--启用
        /// </value>
        public byte Free { get; set; }
        /// <summary>
        /// 合法验证后的短消息
        /// </summary>
        /// <value>
        /// 可填写30个字符
        /// </value>
        public string ShortMsg { get; set; }
        /// <summary>
        /// 打卡认证模式
        /// </summary>
        /// <value>
        /// <para>1--标准模式</para> 
        /// <para>2--人脸+密码</para>
        /// <para>3--卡+人脸</para>
        /// <para>4--多人考勤</para>
        /// <para>5--人证比对</para>
        /// </value>
        public byte Authentication { get; set; }

        /// <summary>
        /// 定时常开功能 开关
        /// </summary>
        /// <value>
        /// 0--禁止；1--启用
        /// </value>
        public byte TimingOpenUse { get; set; }
        /// <summary>
        /// 自动开模式
        /// </summary>
        /// <value>
        /// <para>1、合法认证通过后在指定时段内即可常开</para>
        /// <para>2、授权中标记为常开特权的在指定时段内认证通过即可常开</para>
        /// <para>3、自动开关，到时间自动开关门</para>
        /// </value>
        public byte TimingOpen { get; set; }
        /// <summary>
        /// 常开时段
        /// </summary>
        /// <value>周时段</value>
        public string TimingOpenTime { get; set; }

        /// <summary>
        /// 重复验证权限间隔功能开关
        /// </summary>
        /// <value>
        /// 0--禁止；1--启用
        /// </value>
        public byte RepeatUse { get; set; }
        /// <summary>
        /// 重复验证时响应模式
        /// </summary>
        /// <value>
        /// <para>1、记录事件，不开门，有提示</para>
        /// <para>2、不记录事件，不开门，有提示</para>
        /// <para>3、不做响应，无提示</para>
        /// </value>
        public byte RepeatMode { get; set; }
        /// <summary>
        /// 间隔时间
        /// </summary>
        /// <value>
        /// 最大65535秒。0表示无效
        /// </value>
        public ushort RepeatInterval { get; set; }
        /// <summary>
        /// 权限到期提示功能开关
        /// </summary>
        /// <value>
        /// 0--禁止；1--启用
        /// </value>
        public byte RemindUse { get; set; }
        /// <summary>
        /// 有效期阈值，最少剩余有效天数，低于这个天数在识别后会提示有效期即将过期
        /// </summary>
        /// <value>
        /// 取值范围：1-255。0--表示关闭
        /// </value>
        public byte RemindDay { get; set; }
        /// <summary>
        /// 电梯工作参数,电梯扩展板工作参数功能开关
        /// </summary>
        /// <value>
        ///0--禁止；1--启用 
        /// </value>
        public byte ElevatorUse { get; set; }
        /// <summary>
        /// 继电器参数
        /// </summary>
        /// <value>
        /// 参考《电梯继电器参数格式》
        /// </value>
        public string ElevatorRelay { get; set; }
        /// <summary>
        /// 门磁类型
        /// </summary>
        /// <value>	0，常闭；1，常开；2，无</value>
        public byte DoorSensor { get; set; }
        #endregion

        #region 报警功能
        /// <summary>
        /// 消防报警功能开关
        /// </summary>
        /// <value>
        /// 0--禁用；1--启用 (禁用之后报警就不会触发)
        /// </value>
        public byte FireAlarm { get; set; }
        /// <summary>
        /// 黑名单报警功能开关
        /// </summary>
        /// <value>
        /// 0--禁用；1--启用
        /// </value>
        public byte BlacklistAlarm { get; set; }
        /// <summary>
        /// 防拆报警功能开关
        /// </summary>
        /// <value>
        /// 0--禁用；1--启用
        /// </value>
        public byte AntiDisassemblyAlarm { get; set; }

        /// <summary>
        /// 非法验证报警功能功能开关
        /// </summary>
        /// <value>
        /// 0--禁用；1--启用
        /// </value>
        public byte IllegalVerificationAlarmUse { get; set; }
        /// <summary>
        /// 非法认证次数
        /// </summary>
        /// <value>
        /// 取值范围：0-255,  0--读一次卡就报警
        /// </value>
        public byte IllegalVerificationAlarmTimes { get; set; }
        /// <summary>
        /// 胁迫报警密码功能开关
        /// </summary>
        /// <value>
        /// 0--禁用；1--启用
        /// </value>
        public byte PasswordAlarmUse { get; set; }
        /// <summary>
        /// 报警发生时的工作模式
        /// </summary>
        /// <value>
        /// <para>1--不开门，报警输出</para>
        /// <para>2--开门，报警输出</para>
        /// <para>3--锁定门，报警，只能软件解锁</para>
        /// </value>
        public byte PasswordAlarmMode { get; set; }
        /// <summary>
        /// 胁迫报警密码
        /// </summary>
        /// <remarks>
        /// 输入此密码则发生报警，密码仅支持数字，可以包含
        /// </remarks>
        public string PasswordAlarmPwd { get; set; }

        /// <summary>
        /// 开门超时报警功能开关
        /// </summary>
        /// <value>
        /// 0--禁用；1--启用
        /// </value>
        public byte OpenTimeoutAlarmUse { get; set; }
        /// <summary>
        /// 开门超时报警功能超时时间
        /// </summary>
        /// <value>
        /// 指门磁一直打开的时间。1-65535表示具体数值。单位秒
        /// </value>
        public ushort OpenTimeoutAlarmTimeout { get; set; }
        /// <summary>
        /// 开门超时报警功能继电器输出
        /// </summary>
        /// <value>
        /// 0--不输出继电器；1--输出继电器(匪警继电器)
        /// </value>
        public byte OpenTimeoutAlarm { get; set; }
        /// <summary>
        /// 门磁报警功能开关
        /// </summary>
        /// <value>
        /// 0--禁用；1--启用
        /// </value>
        public byte SensorAlarmUse { get; set; }
        /// <summary>
        /// 门磁报警功能不启用时段
        /// </summary>
        /// <value>
        /// 周时段格式
        /// </value>
        public string SensorAlarmTime { get; set; }
        /// <summary>
        /// 合法验证解除报警开关
        /// </summary>
        /// <value>
        /// 0--禁用；1--启用  (启用后，当报警发生时，进行合法验证将能解除报警 "消防报警除外")
        /// </value>
        public byte UseCloseAlarm { get; set; }
        #endregion

        #region 其他
        /// <summary>
        /// 节假日
        /// </summary>
        public string Holidays { get; set; }
        /// <summary>
        /// 开门时段
        /// </summary>
        public string TimeGroups { get; set; } 
        #endregion

        #region 语音播报
        /// <summary>
        /// 音量
        /// </summary>
        /// <value>
        /// 取值范围：0-10;
        /// 0--关闭声音;
        /// (默认)10--最大声音;
        /// </value>
        public byte Volume { get; set; }
        /// <summary>
        /// 语音播报
        /// </summary>
        /// <value>
        /// 0,不播报；1，播放名字; 2,播放问候语;3,播放名字和问候语
        /// </value>
        public byte Speek { get; set; }
        /// <summary>
        /// 问候语
        /// </summary>
        /// <value>
        /// 0--请通行;1--欢迎光临,2--时间问候语;
        /// </value>
        public byte Grettings { get; set; }
        /// <summary>
        /// 陌生人语音
        /// </summary>
        /// <value>
        /// 0--不播报;1--播报假体;2--播报陌生人;3--播报假体和陌生人
        /// </value>
        public byte StrangerVoice { get; set; }
        #endregion

        #region OEM
        /// <summary>
        /// 制作商
        /// </summary>
        public string MakerName { get; set; }
        /// <summary>
        /// 制造商网址
        /// </summary>
        public string MakerUrl { get; set; }
        /// <summary>
        /// 制造时间
        /// </summary>
        public string MakerDate { get; set; }

        #endregion

        #region 人员存储详情
        /// <summary>
        /// 人员存储容量
        /// </summary>
        public string PSPerson { get; set; }
        /// <summary>
        /// 人脸存储容量
        /// </summary>
        public string PSFace { get; set; }
        /// <summary>
        /// 卡片存储容量
        /// </summary>
        public string PSCard { get; set; }
        /// <summary>
        /// 指纹存储容量
        /// </summary>
        public string PSFP { get; set; }
        /// <summary>
        /// 密码存储容量
        /// </summary>
        public string PSPasword { get; set; }
        /// <summary>
        /// 管理员存储容量
        /// </summary>
        public string PSAdmin { get; set; }
        #endregion

        #region 记录存储详情
        /// <summary>
        /// 出入记录存储容量
        /// </summary>
        public string RSRecord { get; set; }
        /// <summary>
        /// 系统及远程操作记录存储容量
        /// </summary>
        public string RSSystem { get; set; }
        /// <summary>
        /// 报警记录存储容量
        /// </summary>
        public string RSAlarm { get; set; }
        /// <summary>
        /// 门磁、门锁状态记录容量
        /// </summary>
        public string RSDoor { get; set; }
        #endregion

        #region 工作状态

        /// <summary>
        /// 运行天数
        /// </summary>
        //public int WSRun { get; set; }
        ///// <summary>
        ///// 格式化次数
        ///// </summary>
        //public int WSFormat { get; set; }
        ///// <summary>
        ///// 看门狗复位次数
        ///// </summary>
        //public int WSRestart { get; set; }
        ///// <summary>
        ///// 后备电源电压
        ///// </summary>
        //public string WSUps { get; set; }
        ///// <summary>
        ///// 主电源电压
        ///// </summary>
        //public string WSVoltage { get; set; }
        ///// <summary>
        ///// 工作环境温度(摄氏度)
        ///// </summary>
        //public string WSTemperature { get; set; }
        ///// <summary>
        ///// 继电器物理状态 0--COM和NC常闭；1--COM和NO常闭
        ///// </summary>
        //public int? WSRelay { get; set; }
        ///// <summary>
        ///// 常开状态0表示常闭，1常开
        ///// </summary>
        //public int? WSKeepopen { get; set; }
        ///// <summary>
        ///// 门磁状态 0表关，1表示开
        ///// </summary>
        //public int? WSDoorSensor { get; set; }
        ///// <summary>
        ///// 电锁状态 0表关，1表示开
        ///// </summary>
        //public int? WSLockSensor { get; set; }
        ///// <summary>
        ///// 锁定状态0--未锁定，1--锁定
        ///// </summary>
        //public int? WSLocked { get; set; }
        ///// <summary>
        ///// 消息推送状态0--禁用，1--启用
        ///// </summary>
        //public int? WSMsgPush { get; set; }
        ///// <summary>
        ///// 报警状态，无报警为空字符串，多个报警用逗号分隔多个报警名称
        ///// fire 消防报警
        ///// blacklist 黑名单报警
        ///// anti 防拆报警
        ///// Illegal 非法验证
        ///// password 胁迫报警密码
        ///// openTimeout 开门超时报警
        ///// </summary>
        //public string WSAlarm { get; set; }
        #endregion

        #region Version
        /// <summary>
        /// 固件版本
        /// </summary>
        public string VVer { get; set; }
        /// <summary>
        /// 人脸版本
        /// </summary>
        public string VFace { get; set; }
        /// <summary>
        /// 指纹版本
        /// </summary>
        public string VFp { get; set; }
        #endregion

        #region webSocket
        /// <summary>
        /// 保活包间隔
        /// </summary>
        public int IKeepalive { get; set; }
        #endregion

        #region IP信息

        /// <summary>
        /// IP地址
        /// </summary>
        public string IIp { get; set; }
        /// <summary>
        /// 子网掩码
        /// </summary>
        public string IMask { get; set; }
        /// <summary>
        /// mac地址
        /// </summary>
        public string IMac { get; set; }
        /// <summary>
        /// 默认网关
        /// </summary>
        public string IGateway { get; set; }
        /// <summary>
        /// 自动获取IP 0--禁用；1--启用
        /// </summary>
        public int IDhcp { get; set; }
        /// <summary>
        /// DNS地址
        /// </summary>
        public string IDns { get; set; }
        /// <summary>
        /// UPD监听端口
        /// </summary>
        public int IUdp { get; set; }
        /// <summary>
        /// TPC监听端口
        /// </summary>
        public int ITcp { get; set; }
        /// <summary>
        /// WEBSOCKET监听端口
        /// </summary>
        public int IWebsocket { get; set; }
        /// <summary>
        /// 启用SSL 0--禁用；1--启用
        /// </summary>
        public int ISsl { get; set; }

        #endregion

        #region wifi

        /// <summary>
        /// 开关 1 or 0
        /// </summary>
        public int WiFiUse { get; set; }
        /// <summary>
        /// wifi热点名称
        /// </summary>
        public string WiFiName { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string WiFiPassword { get; set; }
        /// <summary>
        /// IP地址
        /// </summary>
        public string WiFiIp { get; set; }
        /// <summary>
        /// 网关
        /// </summary>
        public string WiFiMask { get; set; }
        /// <summary>
        /// 子网掩码
        /// </summary>
        public string WiFiGateway { get; set; }
        #endregion
        //[NotMapped]
        //public bool Status { get; set; }
        /// <summary>
        /// 增加Web页面开关
        /// </summary>
        /// <value>
        /// 1 开，2关
        /// </value>
        public byte WebLoginSwitch { get; set; }
        /// <summary>
        /// 开发者模式开关
        /// </summary>
        /// <value>
        /// 1 开，2关
        /// </value>
        public byte LinuxLoginSwitch { get; set; }
        public void Copy(FaceDeviceInfo info)
        {

        }
    }
}
